package cn.tedu.number;

import java.lang.reflect.Array;

/**
 * 给定一个数组nums，编写一个函数将所有0移动到数组的末尾，同事保持非零元素的相对顺序
 * 示例:
 * 输入: [0, 1, 0, 3, 12]
 * 输出: [1, 3, 12, 0, 0]
 * 说明:
 * 必须在原数组上操作，不能拷贝额外的数组
 * 尽量减少操作次数
 */
public class MoveZeroToEnd {
    public static void main(String[] args) {
        int[] arr = new int[]{11, 0, 30, 0, 99, 0, 13};
        moveZeroToEnd(arr);
        System.out.println(arr);
    }

    private static void swap(int[] arr, int posA, int posB) {
        int tmp = arr[posA];
        arr[posA] = arr[posB];
        arr[posB] = tmp;
    }

    private static void moveZeroToEnd(int[] arr) {
        int len = arr.length;
        int nI = -1;
        int zL = 0;
        while (++nI < len) {
            if (arr[nI] != 0) {
                int tmp = arr[zL];
                arr[zL] = arr[nI];
                arr[nI] = tmp;
                ++zL;
            }
        }
    }
}
